﻿
namespace LM.InterfacesFabricas.Utilidades
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;

    public class ConversorDeObjetos
    {
        public static T Copie<T>(object objetoOrigem)
        {
            var novoObjeto = Activator.CreateInstance(typeof(T));
            if (objetoOrigem == null)
            {
                return default(T);
            }

            var propriedades = objetoOrigem.GetType().GetProperties();
            foreach (var prop in propriedades)
            {
                var propriedadeDestino = novoObjeto.GetType().GetProperty(prop.Name);

                if (propriedadeDestino != null)
                {
                    propriedadeDestino.SetValue(novoObjeto, prop.GetValue(objetoOrigem, null), null);
                }
            }

            return (T)novoObjeto;
        }

        public static List<TDestino> Copie<TDestino, TOrigem>(IList<TOrigem> lista)
        {
            return lista.Select(objOrigem => Copie<TDestino>(objOrigem)).ToList();
        }
    }
}
